অ্যাপাচি অ্যান্ট (Apache ANT) ব্যবহারে অনেক সময় বিল্ড ফাইলের মধ্যে সংবেদনশীল তথ্য (যেমন API key, পাসওয়ার্ড, ডাটাবেস ক্রিডেনশিয়াল) রাখতে হয়। এই ধরনের তথ্য নিরাপদে ম্যানেজ করার জন্য Properties Masking এবং Encryption কৌশল ব্যবহার করা হয়।
Properties Masking হলো বিল্ড প্রক্রিয়া চলাকালীন সংবেদনশীল তথ্য আড়াল করার একটি কৌশল। ANT এই কাজটি করতে propertyhelper বা filterchain ব্যবহার করতে পারে।
build.properties
ফাইল:
db.username=admin
db.password=SuperSecretPassword
build.xml
ফাইল:
<project name="SensitiveData" default="run" basedir=".">
<!-- Load properties -->
<property file="build.properties"/>
<!-- Mask sensitive data -->
<target name="run">
<echo>Database Username: ${db.username}</echo>
<echo>Database Password: ****</echo>
</target>
</project>
এখানে db.password
সরাসরি আউটপুটে দেখানো হয় না; পরিবর্তে এটি "****" দ্বারা মাস্ক করা হয়।
সংবেদনশীল তথ্য এনক্রিপ্ট করার জন্য encrypted.properties ফাইল ব্যবহার করা যেতে পারে। ANT নিজে এনক্রিপ্ট করার সরাসরি সমর্থন দেয় না, তবে আপনি গোপন তথ্য ম্যানেজমেন্ট টুল (যেমন GPG বা অন্যান্য এনক্রিপশন টুল) ব্যবহার করে এনক্রিপ্টেড ফাইল তৈরি করতে পারেন।
এনক্রিপ্টেড ফাইল তৈরি করুন: encrypted.properties
ফাইল:
db.username=YWRtaW4= <!-- Base64 Encoded -->
db.password=U3VwZXJTZWNyZXRQYXNzd29yZA== <!-- Base64 Encoded -->
<project name="EncryptedProperties" default="run" basedir=".">
<!-- Load encrypted properties -->
<property file="encrypted.properties"/>
<!-- Decode Base64 -->
<target name="run">
<echo>Database Username: ${db.username}</echo>
<exec executable="sh">
<arg line="-c 'echo ${db.password} | base64 --decode'"/>
</exec>
</target>
</project>
ANT-এ কাস্টম এনক্রিপশন সমর্থন করার জন্য propertyhelper
বা Java Task ব্যবহার করা হয়।
EncryptionUtil.java:
import java.util.Base64;
public class EncryptionUtil {
public static String decrypt(String encryptedValue) {
return new String(Base64.getDecoder().decode(encryptedValue));
}
}
build.xml:
<project name="CustomEncryption" default="run" basedir=".">
<!-- Load encrypted properties -->
<property name="encrypted.password" value="U3VwZXJTZWNyZXRQYXNzd29yZA=="/>
<!-- Use custom Java task to decrypt -->
<target name="run">
<taskdef name="decrypt" classname="EncryptionUtil" classpath="build/classes"/>
<decrypt encryptedValue="${encrypted.password}" property="decrypted.password"/>
<echo>Decrypted Password: ${decrypted.password}</echo>
</target>
</project>
ANT বিল্ডে সংবেদনশীল তথ্য সরাসরি build.xml
-এ রাখার পরিবর্তে Environment Variables ব্যবহার করা একটি নিরাপদ সমাধান।
<project name="EnvVariableExample" default="run" basedir=".">
<target name="run">
<echo>Database Password: ${env.DB_PASSWORD}</echo>
</target>
</project>
সিস্টেমে এনভায়রনমেন্ট ভ্যারিয়েবল সেট করুন:
export DB_PASSWORD=SuperSecretPassword
আপনার বিল্ড সিস্টেম (যেমন, Jenkins, GitHub Actions) এর Secret Management ফিচার ব্যবহার করতে পারেন। এই ফিচারটি অ্যান্টের বিল্ড ফাইলের সংবেদনশীল তথ্য সরাসরি ম্যানেজ করতে দেয়।
Apache ANT-এ সংবেদনশীল তথ্য ব্যবস্থাপনার জন্য Properties Masking এবং Encryption কৌশল অত্যন্ত কার্যকর। এটি ব্যবহার করে বিল্ড ফাইলের তথ্য গোপন রাখা এবং নিরাপদ প্রক্রিয়া নিশ্চিত করা সম্ভব। বড় স্কেল প্রজেক্টে এনভায়রনমেন্ট ভ্যারিয়েবল বা External Secrets Management ব্যবহার আরও কার্যকর হতে পারে।
common.read_more